package controlador;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;

import javax.swing.ComboBoxModel;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JComboBox;
import javax.swing.JOptionPane;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;

import modelo.Equipo;
import modelo.Jugador;
import modelo.Liga;

import vista.VistaEquipo;
import vista.VistaModeloTablaJugadores;
import archivos.MiLectordeArchivos;

public class ControladorVistaEquipo implements ActionListener, FocusListener {
	private VistaEquipo ventanaEquipo;
	private MiLectordeArchivos lectorArchivos;
	private ArrayList<Jugador> listaJugadores;
	private Liga laLiga;
	
	public ControladorVistaEquipo(Liga liga) {
		super();
		// TODO Auto-generated constructor stub
		ventanaEquipo = new VistaEquipo();
		lectorArchivos = new MiLectordeArchivos(); 
		ventanaEquipo.setLocationRelativeTo(null);
		ventanaEquipo.setVisible(true);
		ventanaEquipo.agregarListener(this);
		ventanaEquipo.agregarFocusListener(this);
		ventanaEquipo.getTxtCodigo().requestFocusInWindow();
		ventanaEquipo.getBtnAgregar().setEnabled(false);
		ventanaEquipo.getBtnCargar().setEnabled(false);
		this.laLiga = liga;
	}
	
	@Override
	public void actionPerformed(ActionEvent e) {
		// TODO Auto-generated method stub
		
		if (e.getActionCommand().equals("Cargar")){
			if (ventanaEquipo.getCmbNombreArchivo().getSelectedIndex()==-1){
				JOptionPane.showMessageDialog(ventanaEquipo,"Primero debe seleccionar un archivo de texto","Seleccione Primero" ,1);
				ventanaEquipo.getCmbNombreArchivo().requestFocusInWindow();
			}else{	
				try {
					listaJugadores = lectorArchivos.getJugadoresDesdeArchivo(ventanaEquipo.getTextCmbNombreArchivo()); 
					ventanaEquipo.setModeloDeTabla(new VistaModeloTablaJugadores(listaJugadores));
					ventanaEquipo.getBtnAgregar().setEnabled(true);
					ventanaEquipo.getBtnCargar().setEnabled(false);
				} catch (IOException e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				}
			}	
		//Selecciono el boton Salir
		}else if (e.getActionCommand().equals("Salir")) {
			ventanaEquipo.setVisible(false);
			ventanaEquipo.dispose();
			//Selecciono el boton Agregar Equipo	
		}else if (e.getActionCommand().equals("Agregar Equipo")) {
			if (ventanaEquipo.getTxtCodigo().getText().equalsIgnoreCase("")){
				JOptionPane.showMessageDialog(ventanaEquipo,"No puede dejar ningun campo en blanco","Rellene todos los campos" ,1);
				ventanaEquipo.getTxtCodigo().requestFocusInWindow();
			}else if (ventanaEquipo.getTxtNombre().getText().equalsIgnoreCase("")){
				JOptionPane.showMessageDialog(ventanaEquipo,"No puede dejar ningun campo en blanco","Rellene todos los campos" ,1);
				ventanaEquipo.getTxtNombre().requestFocusInWindow();
			}else if (ventanaEquipo.getTxtAnnoFundacion().getText().equalsIgnoreCase("")){
				JOptionPane.showMessageDialog(ventanaEquipo,"No puede dejar ningun campo en blanco","Rellene todos los campos" ,1);
				ventanaEquipo.getTxtAnnoFundacion().requestFocusInWindow();
			}else if (ventanaEquipo.getTxtCiudad().getText().equalsIgnoreCase("")){
				JOptionPane.showMessageDialog(ventanaEquipo,"No puede dejar ningun campo en blanco","Rellene todos los campos" ,1);
				ventanaEquipo.getTxtCiudad().requestFocusInWindow();
			}else if (ventanaEquipo.getTxtEstadio().getText().equalsIgnoreCase("")){
				JOptionPane.showMessageDialog(ventanaEquipo,"No puede dejar ningun campo en blanco","Rellene todos los campos" ,1);
				ventanaEquipo.getTxtEstadio().requestFocusInWindow();
			}else if (!jugadorUnico()){ //PARA VERIFICAR QUE NO SE REPITAN JUGADORES
				JOptionPane.showMessageDialog(ventanaEquipo,"Un Jugador solo puede pertenecer a un equipo, seleccione otro archivo de texto...","Hay jugadores repetidos" ,1);
				ventanaEquipo.setModeloDeTabla(new DefaultTableModel());
				ventanaEquipo.getCmbNombreArchivo().requestFocusInWindow();
				ventanaEquipo.getBtnCargar().setEnabled(true);
			}else if (ventanaEquipo.getTblJugadores().getRowCount() < 11){
				JOptionPane.showMessageDialog(ventanaEquipo,"Cada equipo debe tener por lo menos 11 jugadores, seleccione otro archivo de texto...","Equipo incompleto" , 2);
				ventanaEquipo.setModeloDeTabla(new DefaultTableModel()); 
				ventanaEquipo.getCmbNombreArchivo().setSelectedIndex(-1);
				ventanaEquipo.getCmbNombreArchivo().requestFocusInWindow();
			}else{
				Equipo equipoAux = new Equipo(ventanaEquipo.getTxtCodigo().getText(), ventanaEquipo.getTxtNombre().getText(), ventanaEquipo.getTxtAnnoFundacion().getText(), ventanaEquipo.getTxtCiudad().getText(), ventanaEquipo.getTxtEstadio().getText(), 0, 0, 0, 0, 0, 0, 0, listaJugadores);
				laLiga.agregarEquipo(equipoAux);
				JOptionPane.showMessageDialog(ventanaEquipo,"Equipo Agregado Exitosamante","Equipo Agregado" ,1);
				ventanaEquipo.limpiarTodo();
				ventanaEquipo.getBtnCargar().setEnabled(false);
				ventanaEquipo.getBtnAgregar().setEnabled(false);
		    }
			
		}
	}

	public boolean jugadorUnico() {
		boolean sw = false;
		ArrayList<Jugador> listaJugadoresActual = listaJugadores;
		ArrayList<Equipo> listaEquipos = laLiga.getEquipos();
		ArrayList<Jugador> lJugadoresEquipo;
		String cedActual = "", cedAux="";
		if (listaEquipos.size() > 0){
			//System.out.println("lista de jugadores del archivo: " + listaJugadoresActual.size());
			Iterator<Jugador> jugadorActual = listaJugadoresActual.iterator();
			while (jugadorActual.hasNext()){
				//System.out.println("j=" + jugadorActual.next().getNombre());
				Jugador jugadorAux = jugadorActual.next();
		 		cedActual = jugadorAux.getCedula();
		 		
		 		Iterator<Equipo> equipoActual = listaEquipos.iterator();
		 		while (equipoActual.hasNext()){
				//	System.out.println("lista de equipos de la liga: " +listaEquipos.size());
					lJugadoresEquipo = equipoActual.next().getListaJugadores();
					//System.out.println((equipoActual.next()).getNombre());
					
					for(int k=0; k<lJugadoresEquipo.size(); k++){
					//	System.out.println("lista del equipo actual: " +lJugadoresEquipo.size());
						cedAux = lJugadoresEquipo.get(k).getCedula();
						
						//System.out.println("ced actual "+cedActual);
						//System.out.println("auxiliar "+cedAux);
						if (!(cedActual.equals(cedAux))){
							sw = true;
						}else{
							sw = false;
							break;
						}
					}
				}
			}
		}else{
			sw = true;
		}
		return sw;
	}
	
	@Override
	public void focusGained(FocusEvent fe) {
		// TODO Auto-generated method stub
		if (((JComboBox)fe.getSource()).getName().equals("cmbNombreArchivo")){
			ComboBoxModel cmbNombreArchivoModel = new DefaultComboBoxModel(lectorArchivos.getListaArchivos());
			((JComboBox)fe.getSource()).setModel(cmbNombreArchivoModel);
			((JComboBox)fe.getSource()).setSelectedIndex(-1);
			ventanaEquipo.getBtnCargar().setEnabled(true);			
		}
		
		
	}

	@Override
	public void focusLost(FocusEvent fe) {
		// TODO Auto-generated method stub
		//System.out.println("el combo perdio el foco");
	}


}
